package com.wzw.basics.objects;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

/**
 * @author Wangzhiwen
 */
public class Study {

    /**
     * 强引用， new的方式都属于，大多数情况下编写代码的过程中创建的都是强引用
     */
    private static final String strStrongReference = "strongReference";

    /**
     * 软引用，JVM内存不足时会被回收
     */
    private static final SoftReference<String> strSoftReference = new SoftReference<>("111");

    /**
     * 弱引用，JVM GC时就会被回收，不管内存是否充足
     */
    private static final WeakReference<String> STRING_WEAK_REFERENCE = new WeakReference<>("222");

    /**
     * 虚引用，必须与ReferenceQueue一起使用，最弱的引用关系，GC时会被回收
     */
    private static final PhantomReference<String> STRING_PHANTOM_REFERENCE = new PhantomReference<>("444", new ReferenceQueue<>());

    public static void main(String[] args) {
        String str = strSoftReference.get();
        System.out.println(str);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
}
